import connDB

#删除建表语句的某些字段
##实现逻辑：删除建表语句的某些字段 如果某一行匹配到字符，删除这一行，并且如果该行末尾不是逗号或分号，则删除上一行的逗号
def process_lines(text, target_char):
    # 将文本按行分割
    lines = text.split('\n')
    # 用于存储处理后的行
    result = []
    for line in lines:
        # 检查当前行是否包含目标字符
        if target_char in line:
            # 检查该行末尾是否不是逗号或分号
            stripped_line = line.rstrip()
            if not (stripped_line.endswith(',') or stripped_line.endswith(';')):
                # 如果末尾不是逗号或分号，且result中有内容，移除上一行末尾的逗号
                if result:
                    last_idx = len(result) - 1
                    result[last_idx] = result[last_idx].rstrip().rstrip(',') + '\n'
            # 跳过当前行（删除该行）
        else:
            # 保留当前行
            result.append(line + '\n')
    # 连接所有行并移除最后一行多余的换行符
    return ''.join(result).rstrip('\n')

##根据dm建表语句，创建dm表，修改表名即可
def dwdToDmTableName(dm1Schema, dm1TableName,dm2Schema,dm2TableName,attibutes,connDm):
    if connDm:
        queryDm1CreateTable = f"select pg_get_tabledef('{dm1Schema}.{dm1TableName}');"
        dm1CreateTable=connDB.fetch_data(connDm, queryDm1CreateTable)
        if dm1CreateTable:
            dm2CreateTable = dm1CreateTable[0][0]
            dm2CreateTable = dm2CreateTable.replace(dm1Schema,dm2Schema,1)
            dm2CreateTable = dm2CreateTable.replace(dm1TableName,dm2TableName)
            for a in attibutes:
                dm2CreateTable=process_lines(dm2CreateTable,a)
                # print(dmCreateTable)
            connDB.execute_query(connDm, dm2CreateTable)


##读取文件两列表名，批量建表
def batchCreateTable(dm1schema,dm2Schema,connDm):
    with open("read/批量建表.csv", "r", encoding='utf8') as csv:
        for line in csv:
            line = line.strip()
            if line:
                dm1TableName, dm2TableName = line.split(",")
                dwdToDmTableName(dm1schema,dm1TableName,dm2Schema,dm2TableName,attibutes,connDm)

if __name__ == "__main__":

    dm1schema = "common_dm"

    dm2Schema= "dt_yunnan"

    dm1TableName="dm_ft_inv_prmtr_from_tbl_d_f"
    # dm 表名
    dm2TableName="test"
    # 需要删除的dm字段
    attibutes=[]
    connDm = connDB.create_connection(**connDB.dm_prd_config)
    #查询dwd建表语句，修改得到dm表的建表语句,执行dm建表语句
    #dwdToDmTableName(dm1schema,dm1TableName,dm2Schema,dm2TableName,attibutes,connDm)

    #批量建表
    batchCreateTable(dm1schema,dm2Schema,connDm)
